package test;

import java.util.LinkedList;

import stanowisko.Stanowisko;
import stanowisko.StanowiskoConst;
import stanowisko.StanowiskoExp;
import stanowisko.StanowiskoGauss;
import stanowisko.StanowiskoUni;
import system.SystemPS;
import system.SystemUniwersalny;
import item.Samochod;
import kolejka.Kolejka;
import kolejka.KolejkaFIFO;

public class Demo {

	public static void main(String[] args) {
		
		Demo demo = new Demo();
		
		
		demo.przeprowadzSymulacjeMM2();
		demo.przeprowadzSymulacjeMM1FIFO3();
	}

	public Demo() {
	}
	
	public void przeprowadzSymulacjeMM2() {
		
		double INTENSYWNOSC_OSBSLUGI_MYJNI = (double)1/120;
		int LICZBA_SAMOCHODOW = 1000000;
		double INTENSYWNOSC_STRUMIENIA_ZGLOSZEN = (double)1/120;
		int POJEMNOSC_SYSTEMU = 0;
		
		Stanowisko<Samochod> myjnia1 = new StanowiskoExp<Samochod>(1, INTENSYWNOSC_OSBSLUGI_MYJNI);
		Stanowisko<Samochod> myjnia2 = new StanowiskoExp<Samochod>(2, INTENSYWNOSC_OSBSLUGI_MYJNI);
		
		LinkedList<Stanowisko<Samochod>> myjnie = new LinkedList<Stanowisko<Samochod>>();
		myjnie.add(myjnia1);
		myjnie.add(myjnia2);

		Kolejka<Samochod> kolejkaSamochodow = new KolejkaFIFO<Samochod>(0);

		System.out.println("System MM2. Intensywnosc obslugi systemu 1/60. Intesywnosc strumienia zgloszen: 1/120");
		System.out.println("Liczba myjni: "+myjnie.size()+". Liczba samochodow: "+LICZBA_SAMOCHODOW);
		
		
		SystemUniwersalny systemMM2 = new SystemUniwersalny(myjnie, kolejkaSamochodow, INTENSYWNOSC_STRUMIENIA_ZGLOSZEN, LICZBA_SAMOCHODOW, POJEMNOSC_SYSTEMU, false);
		systemMM2.symulacja();
		
		System.out.println();
	}
	
	public void przeprowadzSymulacjeMM1FIFO3() {
		
		double INTENSYWNOSC_OSBSLUGI_MYJNI = (double)1/60;
		int LICZBA_SAMOCHODOW = 1000000;
		double INTENSYWNOSC_STRUMIENIA_ZGLOSZEN = (double)1/120;
		int POJEMNOSC_SYSTEMU = 3;
		
		Stanowisko<Samochod> myjnia1 = new StanowiskoExp<Samochod>(1, INTENSYWNOSC_OSBSLUGI_MYJNI);
		
		LinkedList<Stanowisko<Samochod>> myjnie = new LinkedList<Stanowisko<Samochod>>();
		myjnie.add(myjnia1);

		Kolejka<Samochod> kolejkaSamochodow = new KolejkaFIFO<Samochod>(0);

		System.out.println("System MM1FIFO3. Intensywnosc obslugi systemu 1/60. Intesywnosc strumienia zgloszen: 1/120");
		System.out.println("Liczba myjni: "+ myjnie.size() +". Liczba samochodow: "+LICZBA_SAMOCHODOW);
		System.out.println("Pojemnosc systemu: " + POJEMNOSC_SYSTEMU);

		SystemUniwersalny systemMM1FIFO3 = new SystemUniwersalny(myjnie, kolejkaSamochodow, INTENSYWNOSC_STRUMIENIA_ZGLOSZEN, LICZBA_SAMOCHODOW, POJEMNOSC_SYSTEMU, false);
		systemMM1FIFO3.symulacja();
		
		System.out.println();
	}
	
public void przeprowadzSymulacjeMM1PS() {
		
		double INTENSYWNOSC_OSBSLUGI_MYJNI = (double)1/60;
		int LICZBA_SAMOCHODOW = 50;
		double INTENSYWNOSC_STRUMIENIA_ZGLOSZEN = (double)1/120;
		int POJEMNOSC_SYSTEMU = 0;

		Kolejka<Samochod> kolejkaSamochodow = new KolejkaFIFO<Samochod>(0);

		System.out.println("System MM1PS. Intensywnosc obslugi systemu 1/60. Intesywnosc strumienia zgloszen: 1/120");
		System.out.println("Liczba myjni: 1. Liczba samochodow: "+LICZBA_SAMOCHODOW);
		
		
//		SystemPS systemMM1PS = new SystemPS(kolejkaSamochodow, INTENSYWNOSC_STRUMIENIA_ZGLOSZEN, INTENSYWNOSC_OSBSLUGI_MYJNI, LICZBA_SAMOCHODOW, false);
//		systemMM1PS.symulacja();
		
		System.out.println();
	}
	
}
